package controlador;

import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;

import modelo.JugadorDAO;
import modelo.Niveles;

import tiempo.Contador;
import vista.BotonCircular;
import vista.DialogJugador;

public class ControladorBotones {
	
	private JButton jbttRevision;
	private BotonCircular buttonOpc[];
	private JPanel panelBotones;
	
	private ControladorEvaluacion controladorEvaluacion;
	
	public ControladorBotones(final ControladorJuego controlador, final ControladorSolucion controladorSolucion, final ControladorIntentos controladorIntentos) {
		panelBotones = new JPanel();	
		controlador.getMasterm().getPanelIntentos().add(panelBotones);
		panelBotones.setBounds(190, 20, 100, 50);//posicion del panel 
		panelBotones.setBorder(new LineBorder(new java.awt.Color(0,0,0), 0, false));
		panelBotones.setLayout(new GridBagLayout());
		buttonOpc = new BotonCircular[6];
		int cont=0;
	    while(cont<controlador.getNiveles().getCantBotones()){
	    	buttonOpc[cont] = new BotonCircular(" ", Color.white);
	    	final BotonCircular b = buttonOpc[cont];
	    	buttonOpc[cont].setSize(20, 20);
	    	b.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					if (b.isModificable())
						b.setColorFondo(controlador.getColorGuardado());
				}
			});
	    	panelBotones.add(buttonOpc[cont]);
	    	cont++;
	    }	    
	    jbttRevision = new JButton("OK");
	    jbttRevision.setSize(50, 10);
	    panelBotones.add(jbttRevision);	    
	    jbttRevision.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(botonesLlenos(controlador.getNiveles().getCantBotones())){
					Vector<Boolean> revisadoSolucion = new Vector<Boolean>();
					Vector<Boolean> revisadoIntento = new Vector<Boolean>();
					int negro = 0;
					int blanco = 0;
					//LLENAR VECTORES
					for(int i=0; i<controlador.getNiveles().getCantBotones(); i++){
						revisadoSolucion.add(new Boolean(false));
						revisadoIntento.add(new Boolean(false));
					}
					
					for(int i=0; i<controlador.getNiveles().getCantBotones(); i++){
						if (controladorSolucion.getButtonOpc(i).getColorFondo() == buttonOpc[i].getColorFondo()){
							revisadoSolucion.setElementAt(true, i);
							revisadoIntento.setElementAt(true, i);
							negro++;
						}
					}
					
					for(int i=0; i<controlador.getNiveles().getCantBotones(); i++){
						for(int k=0; k<controlador.getNiveles().getCantBotones(); k++){
							if (controladorSolucion.getButtonOpc(i).getColorFondo() == buttonOpc[k].getColorFondo()){
								if (i!=k && !revisadoSolucion.elementAt(i) && !revisadoIntento.elementAt(k)){
									revisadoSolucion.setElementAt(true, i);
									revisadoIntento.setElementAt(true, k);
									blanco++;
								}
							}
						}
					}
					
					controlador.setIntentos(controlador.getIntentos()+1);
				    controladorEvaluacion = new ControladorEvaluacion(controlador, panelBotones);
				    for(int i=0; i<negro; i++) controladorEvaluacion.AgregarNegro();
					for(int i=0; i<blanco; i++) controladorEvaluacion.AgregarBlanco();
					for(int i=0;i<controlador.getNiveles().getCantBotones();i++){
						buttonOpc[i].setModificable(false);
					}
					jbttRevision.setEnabled(false);
					if (negro != controlador.getNiveles().getCantBotones()){
						if (controlador.getIntentos()+1 != controlador.getNiveles().getCantIntentos())
							controladorIntentos.NuevoIntento(controlador, controladorSolucion);
						else{
							System.out.println("Perdio");
							controlador.getTiempo().interrupt();
						}
					}
					else{
						System.out.println("Gano");
						controlador.getTiempo().interrupt();
						JugadorDAO jugadorDao = new JugadorDAO();
						if (jugadorDao.contarMejores(controlador.getNiveles().getDifNivel()) < 5 ||
								jugadorDao.busquedaMayor(controlador.getNiveles().getDifNivel()) < controlador.getTiempo().getSegundos()){
							new ControladorRegistrar(jugadorDao, controlador);
						}
						else{
							// MENSAJE DE QUE NO CLASIFICO
						}
							
					}
				}
				else{
					//MENSAJE DE LLENAR
				}
			}
		});
	    
	    
	}
	
	public boolean botonesLlenos(int cantBotones){
		for(int j=0; j<cantBotones; j++)
			if (buttonOpc[j].getColorFondo() == Color.white)
				return false;
		return true;
	}
	
	
	
	
}
